library(rstatix)
library(ggpubr)
library(tidyverse)
library(rsample)   # for resampling procedures

Attaching package: 'rsample'

The following object is masked from 'package:Biostrings':

    complement

The following object is masked from 'package:Rcpp':

    populate
library(caret)
package 'caret' was built under R version 4.1.2
Attaching package: 'caret'

The following object is masked from 'package:survival':

    cluster

The following object is masked from 'package:purrr':

    lift
library(ggpubr)
library(survival)
library(survminer)

Attaching package: 'survminer'

The following object is masked from 'package:survival':

    myeloma
library(survMisc)
package 'survMisc' was built under R version 4.1.2survMisc 0.5.6

Attaching package: 'survMisc'

The following object is masked from 'package:edgeR':

    gof

The following object is masked from 'package:ggplot2':

    autoplot
library(glmnet)
package 'glmnet' was built under R version 4.1.2Loaded glmnet 4.1-4
library(vip)

Attaching package: 'vip'

The following object is masked from 'package:utils':

    vi
library(ggfortify)
package 'ggfortify' was built under R version 4.1.2Registered S3 method overwritten by 'ggfortify':
  method        from 
  fortify.table ggalt
anno <- read.table("/Users/ds/Desktop/projects/data/anno/202009_deepRNAseq_sample_full.txt", header =T)



anno <- anno %>% dplyr::select(c(sample_id, wgs_id, biopsy_site, disease_type_SIG_GEX, ID_patient, RB1,tumor_purity_rna)) 
cf <- read.table("/Users/ds/Desktop/projects/BME_analysis/results/CIBERSORTx_Job33_Adjusted.txt", sep = "\t", header = T)
cf$sample_id <- gsub("\\.", "-", cf$Mixture)
row.names(cf) <- cf$Mixture

cf <- inner_join(x = cf, y = anno, by  = c("sample_id" = "sample_id"))



row.names(cf) <- cf$sample_id


cf <- na.omit(cf)#Omit samples without WGS data

cf$RB1 <- ifelse(cf$RB1 == 0, "Del", "WT.Mono")

cf$RB1 %>% table()
.
    Del WT.Mono 
     12      52 
ggsave(plot = plot, filename = "/Users/ds/Desktop/plot.pdf", width = 10)
Saving 10 x 7 in image
mcrpc_rna <- read.table(file = "/Users/ds/Desktop/projects/data/rna/mCRPC_RNA_counts_genename.txt", header = T)
mcrpc_rna <- mcrpc_rna[!duplicated(mcrpc_rna$Genename),]




row.names(mcrpc_rna) <- mcrpc_rna$Genename
mcrpc_rna <- mcrpc_rna[,-1]
keep.exprs <- filterByExpr(as.matrix(mcrpc_rna),min.count = 5 )
No group or design set. Assuming all samples belong to one group.
mcrpc_rna <- mcrpc_rna[keep.exprs,]
mcrpc_rna <- edgeR::cpm(mcrpc_rna, log = T) %>% t() %>% data.frame()#Log normalize for heatmap
#mcrpc_rna <- mcrpc_rna %>% t() %>% data.frame()#Counts for DEG analysis
row.names(mcrpc_rna) <- gsub("\\.", "-",  x = row.names(mcrpc_rna))
#mcrpc_rna <- mcrpc_rna %>% mutate(cases = row.names(.), batch = "mCRPC")



anno <- read.table("/Users/ds/Desktop/projects/data/anno/202009_deepRNAseq_sample_full.txt", header =T)



anno <- anno %>% dplyr::select(c(sample_id, wgs_id, biopsy_site, disease_type_SIG_GEX, ID_patient,tumor_purity_rna, RB1 ))

clin <- read_csv(file = "/Users/ds/Desktop/projects/data/anno/Chen_2019_European_Eurology_Supp4.csv", col_names = T)
Rows: 101 Columns: 11── Column specification ───────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (3): Patient.ID, Death.or.Last.Contact, Disease.Site
dbl (7): Event, OS.mCRPC, ECOG.PS, PSA.At.Biopsy, LDH.at.biopsy, ALP, Hemoglobin.at.biopsy
lgl (1): Enzalutamide resistant
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
clin$Enzalutamide.resistant  <- clin$`Enzalutamide resistant`
clin <- na.omit(clin)
rbs <- read_csv(file = "/Users/ds/Desktop/Supplement/chen.rb1.loss.csv", col_names = T)
Rows: 90 Columns: 2── Column specification ───────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (2): Low-expressed in RB1-loss:, Highly-expressed in RB1-loss:
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
sig.up <- rbs$`Highly-expressed in RB1-loss:` %>% na.omit()
sig.down <- rbs$`Low-expressed in RB1-loss:` %>% na.omit()
tme.up <- bulk_deg %>% dplyr::filter(logFC > 0 & (!Cluster %in% c("tumor", "Unknown", "erythroid")) ) %>% .$Genes

up <- bulk_deg %>% dplyr::filter(logFC > 0 & Genes %in% linc$gene.name) %>% .$Genes
#up <- bulk_deg %>% dplyr::filter(logFC > 0 & Genes %in% pcg$gene.name) %>% .$Genes


tumor.down <- bulk_deg %>% dplyr::filter(logFC < 0 & (Cluster %in% c("tumor")) ) %>% .$Genes
gsva.es <- gsva(t(mcrpc_rna), gset.idx.list = list(tme.up), method = 'zscore')
Estimating combined z-scores for 1 gene sets.

  |                                                                                                   
  |                                                                                             |   0%
  |                                                                                                   
  |=                                                                                            |   1%
  |                                                                                                   
  |===                                                                                          |   3%
  |                                                                                                   
  |====                                                                                         |   4%
  |                                                                                                   
  |=====                                                                                        |   5%
  |                                                                                                   
  |======                                                                                       |   7%
  |                                                                                                   
  |========                                                                                     |   8%
  |                                                                                                   
  |=========                                                                                    |   9%
  |                                                                                                   
  |==========                                                                                   |  11%
  |                                                                                                   
  |===========                                                                                  |  12%
  |                                                                                                   
  |=============                                                                                |  14%
  |                                                                                                   
  |==============                                                                               |  15%
  |                                                                                                   
  |===============                                                                              |  16%
  |                                                                                                   
  |================                                                                             |  18%
  |                                                                                                   
  |==================                                                                           |  19%
  |                                                                                                   
  |===================                                                                          |  20%
  |                                                                                                   
  |====================                                                                         |  22%
  |                                                                                                   
  |=====================                                                                        |  23%
  |                                                                                                   
  |=======================                                                                      |  24%
  |                                                                                                   
  |========================                                                                     |  26%
  |                                                                                                   
  |=========================                                                                    |  27%
  |                                                                                                   
  |==========================                                                                   |  28%
  |                                                                                                   
  |============================                                                                 |  30%
  |                                                                                                   
  |=============================                                                                |  31%
  |                                                                                                   
  |==============================                                                               |  32%
  |                                                                                                   
  |===============================                                                              |  34%
  |                                                                                                   
  |=================================                                                            |  35%
  |                                                                                                   
  |==================================                                                           |  36%
  |                                                                                                   
  |===================================                                                          |  38%
  |                                                                                                   
  |====================================                                                         |  39%
  |                                                                                                   
  |======================================                                                       |  41%
  |                                                                                                   
  |=======================================                                                      |  42%
  |                                                                                                   
  |========================================                                                     |  43%
  |                                                                                                   
  |=========================================                                                    |  45%
  |                                                                                                   
  |===========================================                                                  |  46%
  |                                                                                                   
  |============================================                                                 |  47%
  |                                                                                                   
  |=============================================                                                |  49%
  |                                                                                                   
  |==============================================                                               |  50%
  |                                                                                                   
  |================================================                                             |  51%
  |                                                                                                   
  |=================================================                                            |  53%
  |                                                                                                   
  |==================================================                                           |  54%
  |                                                                                                   
  |====================================================                                         |  55%
  |                                                                                                   
  |=====================================================                                        |  57%
  |                                                                                                   
  |======================================================                                       |  58%
  |                                                                                                   
  |=======================================================                                      |  59%
  |                                                                                                   
  |=========================================================                                    |  61%
  |                                                                                                   
  |==========================================================                                   |  62%
  |                                                                                                   
  |===========================================================                                  |  64%
  |                                                                                                   
  |============================================================                                 |  65%
  |                                                                                                   
  |==============================================================                               |  66%
  |                                                                                                   
  |===============================================================                              |  68%
  |                                                                                                   
  |================================================================                             |  69%
  |                                                                                                   
  |=================================================================                            |  70%
  |                                                                                                   
  |===================================================================                          |  72%
  |                                                                                                   
  |====================================================================                         |  73%
  |                                                                                                   
  |=====================================================================                        |  74%
  |                                                                                                   
  |======================================================================                       |  76%
  |                                                                                                   
  |========================================================================                     |  77%
  |                                                                                                   
  |=========================================================================                    |  78%
  |                                                                                                   
  |==========================================================================                   |  80%
  |                                                                                                   
  |===========================================================================                  |  81%
  |                                                                                                   
  |=============================================================================                |  82%
  |                                                                                                   
  |==============================================================================               |  84%
  |                                                                                                   
  |===============================================================================              |  85%
  |                                                                                                   
  |================================================================================             |  86%
  |                                                                                                   
  |==================================================================================           |  88%
  |                                                                                                   
  |===================================================================================          |  89%
  |                                                                                                   
  |====================================================================================         |  91%
  |                                                                                                   
  |=====================================================================================        |  92%
  |                                                                                                   
  |=======================================================================================      |  93%
  |                                                                                                   
  |========================================================================================     |  95%
  |                                                                                                   
  |=========================================================================================    |  96%
  |                                                                                                   
  |==========================================================================================   |  97%
  |                                                                                                   
  |============================================================================================ |  99%
  |                                                                                                   
  |=============================================================================================| 100%
df <- t(gsva.es) %>% data.frame(sample_id = row.names(.), TME.pcg = .)

gsva.es <- gsva(t(mcrpc_rna), gset.idx.list = list(c(sig.up)), method = 'zscore')
Estimating combined z-scores for 1 gene sets.

  |                                                                                                   
  |                                                                                             |   0%
  |                                                                                                   
  |=                                                                                            |   1%
  |                                                                                                   
  |===                                                                                          |   3%
  |                                                                                                   
  |====                                                                                         |   4%
  |                                                                                                   
  |=====                                                                                        |   5%
  |                                                                                                   
  |======                                                                                       |   7%
  |                                                                                                   
  |========                                                                                     |   8%
  |                                                                                                   
  |=========                                                                                    |   9%
  |                                                                                                   
  |==========                                                                                   |  11%
  |                                                                                                   
  |===========                                                                                  |  12%
  |                                                                                                   
  |=============                                                                                |  14%
  |                                                                                                   
  |==============                                                                               |  15%
  |                                                                                                   
  |===============                                                                              |  16%
  |                                                                                                   
  |================                                                                             |  18%
  |                                                                                                   
  |==================                                                                           |  19%
  |                                                                                                   
  |===================                                                                          |  20%
  |                                                                                                   
  |====================                                                                         |  22%
  |                                                                                                   
  |=====================                                                                        |  23%
  |                                                                                                   
  |=======================                                                                      |  24%
  |                                                                                                   
  |========================                                                                     |  26%
  |                                                                                                   
  |=========================                                                                    |  27%
  |                                                                                                   
  |==========================                                                                   |  28%
  |                                                                                                   
  |============================                                                                 |  30%
  |                                                                                                   
  |=============================                                                                |  31%
  |                                                                                                   
  |==============================                                                               |  32%
  |                                                                                                   
  |===============================                                                              |  34%
  |                                                                                                   
  |=================================                                                            |  35%
  |                                                                                                   
  |==================================                                                           |  36%
  |                                                                                                   
  |===================================                                                          |  38%
  |                                                                                                   
  |====================================                                                         |  39%
  |                                                                                                   
  |======================================                                                       |  41%
  |                                                                                                   
  |=======================================                                                      |  42%
  |                                                                                                   
  |========================================                                                     |  43%
  |                                                                                                   
  |=========================================                                                    |  45%
  |                                                                                                   
  |===========================================                                                  |  46%
  |                                                                                                   
  |============================================                                                 |  47%
  |                                                                                                   
  |=============================================                                                |  49%
  |                                                                                                   
  |==============================================                                               |  50%
  |                                                                                                   
  |================================================                                             |  51%
  |                                                                                                   
  |=================================================                                            |  53%
  |                                                                                                   
  |==================================================                                           |  54%
  |                                                                                                   
  |====================================================                                         |  55%
  |                                                                                                   
  |=====================================================                                        |  57%
  |                                                                                                   
  |======================================================                                       |  58%
  |                                                                                                   
  |=======================================================                                      |  59%
  |                                                                                                   
  |=========================================================                                    |  61%
  |                                                                                                   
  |==========================================================                                   |  62%
  |                                                                                                   
  |===========================================================                                  |  64%
  |                                                                                                   
  |============================================================                                 |  65%
  |                                                                                                   
  |==============================================================                               |  66%
  |                                                                                                   
  |===============================================================                              |  68%
  |                                                                                                   
  |================================================================                             |  69%
  |                                                                                                   
  |=================================================================                            |  70%
  |                                                                                                   
  |===================================================================                          |  72%
  |                                                                                                   
  |====================================================================                         |  73%
  |                                                                                                   
  |=====================================================================                        |  74%
  |                                                                                                   
  |======================================================================                       |  76%
  |                                                                                                   
  |========================================================================                     |  77%
  |                                                                                                   
  |=========================================================================                    |  78%
  |                                                                                                   
  |==========================================================================                   |  80%
  |                                                                                                   
  |===========================================================================                  |  81%
  |                                                                                                   
  |=============================================================================                |  82%
  |                                                                                                   
  |==============================================================================               |  84%
  |                                                                                                   
  |===============================================================================              |  85%
  |                                                                                                   
  |================================================================================             |  86%
  |                                                                                                   
  |==================================================================================           |  88%
  |                                                                                                   
  |===================================================================================          |  89%
  |                                                                                                   
  |====================================================================================         |  91%
  |                                                                                                   
  |=====================================================================================        |  92%
  |                                                                                                   
  |=======================================================================================      |  93%
  |                                                                                                   
  |========================================================================================     |  95%
  |                                                                                                   
  |=========================================================================================    |  96%
  |                                                                                                   
  |==========================================================================================   |  97%
  |                                                                                                   
  |============================================================================================ |  99%
  |                                                                                                   
  |=============================================================================================| 100%
df <- t(gsva.es) %>% data.frame(sample_id = row.names(.), Pca.pcg = .) %>% merge(df) %>% merge(anno) %>% inner_join(y = clin, by = c("ID_patient" = "Patient.ID"))
res_cf %>% dplyr::filter(Sig == "*")
Error in dplyr::filter(., Sig == "*") : object 'res_cf' not found

a <- gsva(t(mcrpc_rna), gset.idx.list = list(tumor.down), method = 'zscore') %>% t()
Estimating combined z-scores for 1 gene sets.

  |                                                                                                   
  |                                                                                             |   0%
  |                                                                                                   
  |=                                                                                            |   1%
  |                                                                                                   
  |===                                                                                          |   3%
  |                                                                                                   
  |====                                                                                         |   4%
  |                                                                                                   
  |=====                                                                                        |   5%
  |                                                                                                   
  |======                                                                                       |   7%
  |                                                                                                   
  |========                                                                                     |   8%
  |                                                                                                   
  |=========                                                                                    |   9%
  |                                                                                                   
  |==========                                                                                   |  11%
  |                                                                                                   
  |===========                                                                                  |  12%
  |                                                                                                   
  |=============                                                                                |  14%
  |                                                                                                   
  |==============                                                                               |  15%
  |                                                                                                   
  |===============                                                                              |  16%
  |                                                                                                   
  |================                                                                             |  18%
  |                                                                                                   
  |==================                                                                           |  19%
  |                                                                                                   
  |===================                                                                          |  20%
  |                                                                                                   
  |====================                                                                         |  22%
  |                                                                                                   
  |=====================                                                                        |  23%
  |                                                                                                   
  |=======================                                                                      |  24%
  |                                                                                                   
  |========================                                                                     |  26%
  |                                                                                                   
  |=========================                                                                    |  27%
  |                                                                                                   
  |==========================                                                                   |  28%
  |                                                                                                   
  |============================                                                                 |  30%
  |                                                                                                   
  |=============================                                                                |  31%
  |                                                                                                   
  |==============================                                                               |  32%
  |                                                                                                   
  |===============================                                                              |  34%
  |                                                                                                   
  |=================================                                                            |  35%
  |                                                                                                   
  |==================================                                                           |  36%
  |                                                                                                   
  |===================================                                                          |  38%
  |                                                                                                   
  |====================================                                                         |  39%
  |                                                                                                   
  |======================================                                                       |  41%
  |                                                                                                   
  |=======================================                                                      |  42%
  |                                                                                                   
  |========================================                                                     |  43%
  |                                                                                                   
  |=========================================                                                    |  45%
  |                                                                                                   
  |===========================================                                                  |  46%
  |                                                                                                   
  |============================================                                                 |  47%
  |                                                                                                   
  |=============================================                                                |  49%
  |                                                                                                   
  |==============================================                                               |  50%
  |                                                                                                   
  |================================================                                             |  51%
  |                                                                                                   
  |=================================================                                            |  53%
  |                                                                                                   
  |==================================================                                           |  54%
  |                                                                                                   
  |====================================================                                         |  55%
  |                                                                                                   
  |=====================================================                                        |  57%
  |                                                                                                   
  |======================================================                                       |  58%
  |                                                                                                   
  |=======================================================                                      |  59%
  |                                                                                                   
  |=========================================================                                    |  61%
  |                                                                                                   
  |==========================================================                                   |  62%
  |                                                                                                   
  |===========================================================                                  |  64%
  |                                                                                                   
  |============================================================                                 |  65%
  |                                                                                                   
  |==============================================================                               |  66%
  |                                                                                                   
  |===============================================================                              |  68%
  |                                                                                                   
  |================================================================                             |  69%
  |                                                                                                   
  |=================================================================                            |  70%
  |                                                                                                   
  |===================================================================                          |  72%
  |                                                                                                   
  |====================================================================                         |  73%
  |                                                                                                   
  |=====================================================================                        |  74%
  |                                                                                                   
  |======================================================================                       |  76%
  |                                                                                                   
  |========================================================================                     |  77%
  |                                                                                                   
  |=========================================================================                    |  78%
  |                                                                                                   
  |==========================================================================                   |  80%
  |                                                                                                   
  |===========================================================================                  |  81%
  |                                                                                                   
  |=============================================================================                |  82%
  |                                                                                                   
  |==============================================================================               |  84%
  |                                                                                                   
  |===============================================================================              |  85%
  |                                                                                                   
  |================================================================================             |  86%
  |                                                                                                   
  |==================================================================================           |  88%
  |                                                                                                   
  |===================================================================================          |  89%
  |                                                                                                   
  |====================================================================================         |  91%
  |                                                                                                   
  |=====================================================================================        |  92%
  |                                                                                                   
  |=======================================================================================      |  93%
  |                                                                                                   
  |========================================================================================     |  95%
  |                                                                                                   
  |=========================================================================================    |  96%
  |                                                                                                   
  |==========================================================================================   |  97%
  |                                                                                                   
  |============================================================================================ |  99%
  |                                                                                                   
  |=============================================================================================| 100%
b <- gsva(t(mcrpc_rna), gset.idx.list = list(sig.up), method = 'zscore') %>% t()
Estimating combined z-scores for 1 gene sets.

  |                                                                                                   
  |                                                                                             |   0%
  |                                                                                                   
  |=                                                                                            |   1%
  |                                                                                                   
  |===                                                                                          |   3%
  |                                                                                                   
  |====                                                                                         |   4%
  |                                                                                                   
  |=====                                                                                        |   5%
  |                                                                                                   
  |======                                                                                       |   7%
  |                                                                                                   
  |========                                                                                     |   8%
  |                                                                                                   
  |=========                                                                                    |   9%
  |                                                                                                   
  |==========                                                                                   |  11%
  |                                                                                                   
  |===========                                                                                  |  12%
  |                                                                                                   
  |=============                                                                                |  14%
  |                                                                                                   
  |==============                                                                               |  15%
  |                                                                                                   
  |===============                                                                              |  16%
  |                                                                                                   
  |================                                                                             |  18%
  |                                                                                                   
  |==================                                                                           |  19%
  |                                                                                                   
  |===================                                                                          |  20%
  |                                                                                                   
  |====================                                                                         |  22%
  |                                                                                                   
  |=====================                                                                        |  23%
  |                                                                                                   
  |=======================                                                                      |  24%
  |                                                                                                   
  |========================                                                                     |  26%
  |                                                                                                   
  |=========================                                                                    |  27%
  |                                                                                                   
  |==========================                                                                   |  28%
  |                                                                                                   
  |============================                                                                 |  30%
  |                                                                                                   
  |=============================                                                                |  31%
  |                                                                                                   
  |==============================                                                               |  32%
  |                                                                                                   
  |===============================                                                              |  34%
  |                                                                                                   
  |=================================                                                            |  35%
  |                                                                                                   
  |==================================                                                           |  36%
  |                                                                                                   
  |===================================                                                          |  38%
  |                                                                                                   
  |====================================                                                         |  39%
  |                                                                                                   
  |======================================                                                       |  41%
  |                                                                                                   
  |=======================================                                                      |  42%
  |                                                                                                   
  |========================================                                                     |  43%
  |                                                                                                   
  |=========================================                                                    |  45%
  |                                                                                                   
  |===========================================                                                  |  46%
  |                                                                                                   
  |============================================                                                 |  47%
  |                                                                                                   
  |=============================================                                                |  49%
  |                                                                                                   
  |==============================================                                               |  50%
  |                                                                                                   
  |================================================                                             |  51%
  |                                                                                                   
  |=================================================                                            |  53%
  |                                                                                                   
  |==================================================                                           |  54%
  |                                                                                                   
  |====================================================                                         |  55%
  |                                                                                                   
  |=====================================================                                        |  57%
  |                                                                                                   
  |======================================================                                       |  58%
  |                                                                                                   
  |=======================================================                                      |  59%
  |                                                                                                   
  |=========================================================                                    |  61%
  |                                                                                                   
  |==========================================================                                   |  62%
  |                                                                                                   
  |===========================================================                                  |  64%
  |                                                                                                   
  |============================================================                                 |  65%
  |                                                                                                   
  |==============================================================                               |  66%
  |                                                                                                   
  |===============================================================                              |  68%
  |                                                                                                   
  |================================================================                             |  69%
  |                                                                                                   
  |=================================================================                            |  70%
  |                                                                                                   
  |===================================================================                          |  72%
  |                                                                                                   
  |====================================================================                         |  73%
  |                                                                                                   
  |=====================================================================                        |  74%
  |                                                                                                   
  |======================================================================                       |  76%
  |                                                                                                   
  |========================================================================                     |  77%
  |                                                                                                   
  |=========================================================================                    |  78%
  |                                                                                                   
  |==========================================================================                   |  80%
  |                                                                                                   
  |===========================================================================                  |  81%
  |                                                                                                   
  |=============================================================================                |  82%
  |                                                                                                   
  |==============================================================================               |  84%
  |                                                                                                   
  |===============================================================================              |  85%
  |                                                                                                   
  |================================================================================             |  86%
  |                                                                                                   
  |==================================================================================           |  88%
  |                                                                                                   
  |===================================================================================          |  89%
  |                                                                                                   
  |====================================================================================         |  91%
  |                                                                                                   
  |=====================================================================================        |  92%
  |                                                                                                   
  |=======================================================================================      |  93%
  |                                                                                                   
  |========================================================================================     |  95%
  |                                                                                                   
  |=========================================================================================    |  96%
  |                                                                                                   
  |==========================================================================================   |  97%
  |                                                                                                   
  |============================================================================================ |  99%
  |                                                                                                   
  |=============================================================================================| 100%
c <- gsva(t(mcrpc_rna), gset.idx.list = list(dplyr::filter(gs, gs_name == "HALLMARK_TNFA_SIGNALING_VIA_NFKB")$gene_symbol), method = 'zscore') %>% t()
Estimating combined z-scores for 1 gene sets.

  |                                                                                                   
  |                                                                                             |   0%
  |                                                                                                   
  |=                                                                                            |   1%
  |                                                                                                   
  |===                                                                                          |   3%
  |                                                                                                   
  |====                                                                                         |   4%
  |                                                                                                   
  |=====                                                                                        |   5%
  |                                                                                                   
  |======                                                                                       |   7%
  |                                                                                                   
  |========                                                                                     |   8%
  |                                                                                                   
  |=========                                                                                    |   9%
  |                                                                                                   
  |==========                                                                                   |  11%
  |                                                                                                   
  |===========                                                                                  |  12%
  |                                                                                                   
  |=============                                                                                |  14%
  |                                                                                                   
  |==============                                                                               |  15%
  |                                                                                                   
  |===============                                                                              |  16%
  |                                                                                                   
  |================                                                                             |  18%
  |                                                                                                   
  |==================                                                                           |  19%
  |                                                                                                   
  |===================                                                                          |  20%
  |                                                                                                   
  |====================                                                                         |  22%
  |                                                                                                   
  |=====================                                                                        |  23%
  |                                                                                                   
  |=======================                                                                      |  24%
  |                                                                                                   
  |========================                                                                     |  26%
  |                                                                                                   
  |=========================                                                                    |  27%
  |                                                                                                   
  |==========================                                                                   |  28%
  |                                                                                                   
  |============================                                                                 |  30%
  |                                                                                                   
  |=============================                                                                |  31%
  |                                                                                                   
  |==============================                                                               |  32%
  |                                                                                                   
  |===============================                                                              |  34%
  |                                                                                                   
  |=================================                                                            |  35%
  |                                                                                                   
  |==================================                                                           |  36%
  |                                                                                                   
  |===================================                                                          |  38%
  |                                                                                                   
  |====================================                                                         |  39%
  |                                                                                                   
  |======================================                                                       |  41%
  |                                                                                                   
  |=======================================                                                      |  42%
  |                                                                                                   
  |========================================                                                     |  43%
  |                                                                                                   
  |=========================================                                                    |  45%
  |                                                                                                   
  |===========================================                                                  |  46%
  |                                                                                                   
  |============================================                                                 |  47%
  |                                                                                                   
  |=============================================                                                |  49%
  |                                                                                                   
  |==============================================                                               |  50%
  |                                                                                                   
  |================================================                                             |  51%
  |                                                                                                   
  |=================================================                                            |  53%
  |                                                                                                   
  |==================================================                                           |  54%
  |                                                                                                   
  |====================================================                                         |  55%
  |                                                                                                   
  |=====================================================                                        |  57%
  |                                                                                                   
  |======================================================                                       |  58%
  |                                                                                                   
  |=======================================================                                      |  59%
  |                                                                                                   
  |=========================================================                                    |  61%
  |                                                                                                   
  |==========================================================                                   |  62%
  |                                                                                                   
  |===========================================================                                  |  64%
  |                                                                                                   
  |============================================================                                 |  65%
  |                                                                                                   
  |==============================================================                               |  66%
  |                                                                                                   
  |===============================================================                              |  68%
  |                                                                                                   
  |================================================================                             |  69%
  |                                                                                                   
  |=================================================================                            |  70%
  |                                                                                                   
  |===================================================================                          |  72%
  |                                                                                                   
  |====================================================================                         |  73%
  |                                                                                                   
  |=====================================================================                        |  74%
  |                                                                                                   
  |======================================================================                       |  76%
  |                                                                                                   
  |========================================================================                     |  77%
  |                                                                                                   
  |=========================================================================                    |  78%
  |                                                                                                   
  |==========================================================================                   |  80%
  |                                                                                                   
  |===========================================================================                  |  81%
  |                                                                                                   
  |=============================================================================                |  82%
  |                                                                                                   
  |==============================================================================               |  84%
  |                                                                                                   
  |===============================================================================              |  85%
  |                                                                                                   
  |================================================================================             |  86%
  |                                                                                                   
  |==================================================================================           |  88%
  |                                                                                                   
  |===================================================================================          |  89%
  |                                                                                                   
  |====================================================================================         |  91%
  |                                                                                                   
  |=====================================================================================        |  92%
  |                                                                                                   
  |=======================================================================================      |  93%
  |                                                                                                   
  |========================================================================================     |  95%
  |                                                                                                   
  |=========================================================================================    |  96%
  |                                                                                                   
  |==========================================================================================   |  97%
  |                                                                                                   
  |============================================================================================ |  99%
  |                                                                                                   
  |=============================================================================================| 100%
p <- data.frame(RBS.high.lncRNA = a,RBS.upregulated.genes = b,Hallmark.TNFA.Signaling.Via.NFKB = c) %>% gather(key = "Signature", value = "GEX", -RBS.high.lncRNA) %>% ggplot(aes(x = RBS.high.lncRNA
, y = GEX, color = Signature)) %>% facet(facet.by = "Signature") + geom_point() + geom_smooth(method = 'lm') + stat_cor() + scale_color_manual(values = c("darkred", "darkblue")) + theme_classic() + ylab("Expression") + xlab("RB1 loss upregulated TME-lncRNAs")

p

NA
NA
NA
ggsave(filename = "/Users/ds/Desktop/plot.pdf", plot = p, width = 10)
Saving 10 x 7 in image

up
query <- linc[linc$gene.name %in% up,'gene', drop = T] 

query <- EnsDb.Hsapiens.v86 %>% promoters() %>% data.frame() %>% dplyr::filter(gene_id %in% query) %>% GRanges()

seqlevelsStyle(query) <- "UCSC"



seq <- getSeq(BSgenome.Hsapiens.UCSC.hg38, query)
names(seq) <- query$tx_id
writeXStringSet(seq, filepath = "/Users/ds/Desktop/rb1.up.fa")


query <- linc[linc$gene.name %in% tme.up,'gene', drop = T] 

query <- EnsDb.Hsapiens.v86 %>% promoters() %>% data.frame() %>% dplyr::filter(gene_id %in% query) %>% GRanges()

seqlevelsStyle(query) <- "UCSC"



seq <- getSeq(BSgenome.Hsapiens.UCSC.hg38, query)
names(seq) <- query$tx_id
writeXStringSet(seq, filepath = "/Users/ds/Desktop/rb1.tme.up.fa")
p <- rbind(motif.up, mutate(motif.tme.up, Sig = Sig * -1)) %>% mutate(Group = ifelse(Sig > 0, "All RB1-loss upregulated lncRNAs", "RB1-loss upregulated TME-lncRNAs")) %>% ggplot(aes(y = reorder(TF, Sig), x = Sig, fill = Group)) + geom_col() + xlim(c(-100,100)) + scale_x_continuous(breaks = seq(-100,100,10),labels = seq(-100,100,10) %>% abs()) + ylab("TF Motif") + scale_fill_manual(values = c("darkred", "navy")) + theme_classic() + xlab("-log10(Adj Pvalue)")
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing
scale.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkocnN0YXRpeCkKbGlicmFyeShnZ3B1YnIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJzYW1wbGUpICAgIyBmb3IgcmVzYW1wbGluZyBwcm9jZWR1cmVzCmxpYnJhcnkoY2FyZXQpCmxpYnJhcnkoZ2dwdWJyKQpsaWJyYXJ5KHN1cnZpdmFsKQpsaWJyYXJ5KHN1cnZtaW5lcikKbGlicmFyeShzdXJ2TWlzYykKbGlicmFyeShnbG1uZXQpCmxpYnJhcnkodmlwKQpsaWJyYXJ5KGdnZm9ydGlmeSkKYGBgCgpgYGB7cn0KYW5ubyA8LSByZWFkLnRhYmxlKCIvVXNlcnMvZHMvRGVza3RvcC9wcm9qZWN0cy9kYXRhL2Fubm8vMjAyMDA5X2RlZXBSTkFzZXFfc2FtcGxlX2Z1bGwudHh0IiwgaGVhZGVyID1UKQoKCgphbm5vIDwtIGFubm8gJT4lIGRwbHlyOjpzZWxlY3QoYyhzYW1wbGVfaWQsIHdnc19pZCwgYmlvcHN5X3NpdGUsIGRpc2Vhc2VfdHlwZV9TSUdfR0VYLCBJRF9wYXRpZW50LCBSQjEsdHVtb3JfcHVyaXR5X3JuYSkpIApjZiA8LSByZWFkLnRhYmxlKCIvVXNlcnMvZHMvRGVza3RvcC9wcm9qZWN0cy9CTUVfYW5hbHlzaXMvcmVzdWx0cy9DSUJFUlNPUlR4X0pvYjMzX0FkanVzdGVkLnR4dCIsIHNlcCA9ICJcdCIsIGhlYWRlciA9IFQpCmNmJHNhbXBsZV9pZCA8LSBnc3ViKCJcXC4iLCAiLSIsIGNmJE1peHR1cmUpCnJvdy5uYW1lcyhjZikgPC0gY2YkTWl4dHVyZQoKY2YgPC0gaW5uZXJfam9pbih4ID0gY2YsIHkgPSBhbm5vLCBieSAgPSBjKCJzYW1wbGVfaWQiID0gInNhbXBsZV9pZCIpKQoKCgpyb3cubmFtZXMoY2YpIDwtIGNmJHNhbXBsZV9pZAoKCmNmIDwtIG5hLm9taXQoY2YpI09taXQgc2FtcGxlcyB3aXRob3V0IFdHUyBkYXRhCgpjZiRSQjEgPC0gaWZlbHNlKGNmJFJCMSA9PSAwLCAiRGVsIiwgIldULk1vbm8iKQoKY2YkUkIxICU+JSB0YWJsZSgpCmBgYAoKCmBgYHtyfQojTGltbWEgREUgYW5hbHlzaXMgCgoKI1JlYWQgaW4gcmF3IGNvdW50cywgY29udmVydCB0byBtYXRyaXggd2l0aCByb3dzIGFzIGdlbmUgc3ltYm9scywgY29sdW1ucyBhcyBzYW1wbGVzCmNvdW50cyA8LSByZWFkLnRhYmxlKCIvVXNlcnMvZHMvRGVza3RvcC9wcm9qZWN0cy9kYXRhL3JuYS9tQ1JQQ19STkFfY291bnRzX2dlbmVuYW1lLnR4dCIsIGhlYWRlciA9IFQpCgoKCgpjb3VudHMgPC0gY291bnRzWyFkdXBsaWNhdGVkKGNvdW50cyRHZW5lbmFtZSksXQpyb3cubmFtZXMoY291bnRzKSA8LSBjb3VudHMkR2VuZW5hbWUKY291bnRzIDwtIGNvdW50c1ssLTFdICU+JSBhcy5tYXRyaXgoKQpjb2xuYW1lcyhjb3VudHMpIDwtIGdzdWIoIlxcLiIsICItIiwgY29sbmFtZXMoY291bnRzKSkgIAoKI2NvdW50cyA8LSBjb3VudHNbcm93Lm5hbWVzKGNvdW50cykgJWluJSBsaW5jJGdlbmUubmFtZSxdI1N1YnNldCBsbmNybmEgaW4gaGczOCAKCgojS2VlcCBtYXRjaGluZyBzYW1wbGUgaWRzIG9mIFJOQS1zZXEgYW5kIFdHUyBmb3IgY21wIGFubm90YXRpb24KaWRzIDwtIGludGVyc2VjdChjb2xuYW1lcyhjb3VudHMpLHJvdy5uYW1lcyhjZikpCmNvdW50cyA8LSBjb3VudHNbLGlkc10KY2YgPC0gY2ZbaWRzLF0KCgoKI0NyZWF0ZSBkZ2Ugb2JqZWN0IC0gY3JlYXRlIGNvdW50cyBtYXRyaXggYW5kIHNhbXBsZSBhbm5vIGRmIHdpdGggbGlicmFyeSBzaXplcwp4IDwtIERHRUxpc3QoY291bnRzID0gY291bnRzKQoKI0FkZCBjbHVzdGVyIHZhcmlhYmxlIHRvIGRlc2lnbmF0ZSBncm91cCBtZW1iZXJzaGlwIHRvIHNhbXBsZSBkZgp4JHNhbXBsZXMgPC0gY2JpbmQoeCRzYW1wbGVzLCBkcGx5cjo6c2VsZWN0KGNmLCBjKCBiaW9wc3lfc2l0ZSwgZGlzZWFzZV90eXBlX1NJR19HRVgsIFJCMSx0dW1vcl9wdXJpdHlfcm5hICkpKQoKI1JlbW92ZSBnZW5lcyB3aXRoIGxvdyBleHByZXNzaW9uIGFjcm9zcyBzYW1wbGVzCmtlZXAuZXhwcnMgPC0gZmlsdGVyQnlFeHByKHgsIG1pbi5jb3VudCA9IDUpCnggPC0geFtrZWVwLmV4cHJzLCwga2VlcC5saWIuc2l6ZSA9IEZdCgojQ2FsY3VsYXRlIGVmZmVjdGl2ZSBsaWJyYXJ5IHNpemUgdXNpbmcgRWRnZVIgVE1NIG1ldGhvZAp4IDwtIGNhbGNOb3JtRmFjdG9ycyh4LCBtZXRob2QgPSAiVE1NIikKCiN4IDwtIHhbcm93Lm5hbWVzKHgpICVpbiUgbGluYyRnZW5lLm5hbWUsXSNTdWJzZXQgbG5jcm5hIGluIGhnMzggCgojeCA8LSB4W3Jvdy5uYW1lcyh4KSAlaW4lIHBjZyRnZW5lLm5hbWUsXSNTdWJzZXQgcGNnIGluIGhnMzgKCiNDcmVhdGUgZGVzaWduIG1hdHJpeCAody9vIGludGVyY2VwdCkgc3BlY2lmeWluZyBncm91cCBtZW1iZXJzaGlwCmRlc2lnbiA8LSBtb2RlbC5tYXRyaXgofiAwICsgUkIxICsgdHVtb3JfcHVyaXR5X3JuYSwgZGF0YSA9IGNmKSAKCmRlc2lnbgpjb2xuYW1lcyhkZXNpZ24pIDwtIGMoIkRlbCIsICJXVC5Nb25vIiwgIlB1cml0eSIpIAoKIyAjQ3JlYXRlIGNvbnRyYXN0cyB0byBjYWxjdWxhdGUKY29udHIubWF0cml4IDwtIG1ha2VDb250cmFzdHMoRGVsIC0gV1QuTW9ubywgbGV2ZWxzID0gY29sbmFtZXMoZGVzaWduKSkKCgojTm9ybWFsaXplIGNvdW50cyB0byBsb2cgQ1BNIHVzaW5nIHZvb20KdiA8LSB2b29tKHgsIGRlc2lnbiA9IGRlc2lnbikKCiNGaXQgTE0gYWNjb3JkaW5nIHRvIGRlc2lnbgp2Zml0IDwtIGxtRml0KHYsIGRlc2lnbikKCiNDYWxjdWxhdGUgY29udHJhc3RzIGkuZSBsb2dGQyBmb3IgZ2VuZXMgYWNyb3NzIGdyb3Vwcwp2Zml0IDwtIGNvbnRyYXN0cy5maXQodmZpdCwgY29udHJhc3RzPWNvbnRyLm1hdHJpeCkKCiNDYWxjdWxhdGUgdC1zdGF0cyBhbmQgcCB2YWxzIHVzaW5nIEVtcCBiYXllcyBtZXRob2QKZWZpdCA8LSBlQmF5ZXModmZpdCkKCgojR2V0IGxpc3Qgb2YgYWxsIGdlbmVzLCBhcnJhbmdlIGluIGRlY3JlYXNpbmcgb3JkZXIKYnVsa19kZWcgPC0gdG9wVGFibGUoZWZpdCwgbnVtYmVyID0gSW5mLCBjb2VmID0gMSkgJT4lIGRhdGEuZnJhbWUoR2VuZXMgPSByb3cubmFtZXMoLikpICAlPiUgYXJyYW5nZSgtbG9nRkMpIAoKCgpidWxrX2RlZyA8LSBidWxrX2RlZyAlPiUgZHBseXI6OmZpbHRlcihhZGouUC5WYWwgPCAwLjEgJiBhYnMobG9nRkMpID4gMSkgJT4lIGxlZnRfam9pbiggeSA9IGZpbmFsX21hcmtlcnMsIGJ5ID0gYygiR2VuZXMiID0gImdlbmUiKSkKCgogCmJ1bGtfZGVnIDwtIGJ1bGtfZGVnICU+JSBkcGx5cjo6ZmlsdGVyKGFkai5QLlZhbCA8IDAuMSAmIGFicyhsb2dGQykgPiAxKSAlPiUgbGVmdF9qb2luKCB5ID0gcGNnX21hcmtlcnMsIGJ5ID0gYygiR2VuZXMiID0gImdlbmUiKSkKCmJ1bGtfZGVnCgpidWxrX2RlZyRjbHVzdGVyIDwtIGJ1bGtfZGVnJGNsdXN0ZXIgJT4lIGFzLmNoYXJhY3RlcigpCmJ1bGtfZGVnIDwtIGJ1bGtfZGVnICU+JSBtdXRhdGUoQ2x1c3RlciA9IGlmZWxzZShpcy5uYShjbHVzdGVyKSwgIlVua25vd24iLCBjbHVzdGVyKSkgJT4lIG11dGF0ZShBbHBoYSA9IGlmZWxzZShDbHVzdGVyID09ICJVbmtub3duIiwgMC44LCAxKSkKCgoKYGBgCgoKCmBgYHtyfQoKcGxvdCA8LSBnZ3Bsb3QoYnVsa19kZWcsIGFlcyh4ID0gbG9nRkMsIHkgPSAtbG9nMTAoYWRqLlAuVmFsKSwgY29sb3IgPSBDbHVzdGVyLCBhbHBoYSA9IEFscGhhLCBsYWJlbCA9IEdlbmVzKSApICsgZ2VvbV9wb2ludCgpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInB1cnBsZSIsICJvcmFuZ2UiLCAicmVkIiwgInBpbmsiLCAiZGFya2dyZWVuIiwibmF2eSIgLCAiZ3JleSIpKSArIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC1sb2cxMCgwLjEpLCBsaW5ldHlwZT0gJ2Rhc2hlZCcpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYygtMSwxKSwgbGluZXR5cGUgPSAnZGFzaGVkJykgKyBnZW9tX3RleHRfcmVwZWwoZGF0YSA9IGRwbHlyOjpmaWx0ZXIoYnVsa19kZWcsIGFicyhsb2dGQykgPiAxICZhZGouUC5WYWwgPCAwLjEgJiBDbHVzdGVyICE9ICJVbmtub3duIiksIGZvcmNlID0gMC44LCBzaXplID0gMi41KSArIGdndGl0bGUobGFiZWwgPSAiUHJvdGVpbiBjb2RpbmcgZ2VuZXMgYXNzb2NpYXRlZCB3aXRoIGJpLWFsbGVsaWMgUkIxIGxvc3MiKSArIHRoZW1lX2NsYXNzaWMoKQpwbG90Cmdnc2F2ZShwbG90ID0gcGxvdCwgZmlsZW5hbWUgPSAiL1VzZXJzL2RzL0Rlc2t0b3AvcGxvdC5wZGYiLCB3aWR0aCA9IDEwKQoKd3JpdGUuY3N2KHggPSBidWxrX2RlZywgZmlsZSA9ICIvVXNlcnMvZHMvRGVza3RvcC9TdXBwbGVtZW50YXJ5LlRhYmxlNS5jc3YiLHF1b3RlID0gRiwgcm93Lm5hbWVzID0gRikKCnBsb3QKYnVsa19kZWcgJT4lIGRwbHlyOjpmaWx0ZXIobG9nRkMgPjAgJiBjbHVzdGVyICE9ICJVbmtub3duIikKYGBgCgoKYGBge3J9Cm1jcnBjX3JuYSA8LSByZWFkLnRhYmxlKGZpbGUgPSAiL1VzZXJzL2RzL0Rlc2t0b3AvcHJvamVjdHMvZGF0YS9ybmEvbUNSUENfUk5BX2NvdW50c19nZW5lbmFtZS50eHQiLCBoZWFkZXIgPSBUKQptY3JwY19ybmEgPC0gbWNycGNfcm5hWyFkdXBsaWNhdGVkKG1jcnBjX3JuYSRHZW5lbmFtZSksXQoKCgoKcm93Lm5hbWVzKG1jcnBjX3JuYSkgPC0gbWNycGNfcm5hJEdlbmVuYW1lCm1jcnBjX3JuYSA8LSBtY3JwY19ybmFbLC0xXQprZWVwLmV4cHJzIDwtIGZpbHRlckJ5RXhwcihhcy5tYXRyaXgobWNycGNfcm5hKSxtaW4uY291bnQgPSA1ICkKCgoKCm1jcnBjX3JuYSA8LSBtY3JwY19ybmFba2VlcC5leHBycyxdCm1jcnBjX3JuYSA8LSBlZGdlUjo6Y3BtKG1jcnBjX3JuYSwgbG9nID0gVCkgJT4lIHQoKSAlPiUgZGF0YS5mcmFtZSgpI0xvZyBub3JtYWxpemUgZm9yIGhlYXRtYXAKI21jcnBjX3JuYSA8LSBtY3JwY19ybmEgJT4lIHQoKSAlPiUgZGF0YS5mcmFtZSgpI0NvdW50cyBmb3IgREVHIGFuYWx5c2lzCnJvdy5uYW1lcyhtY3JwY19ybmEpIDwtIGdzdWIoIlxcLiIsICItIiwgIHggPSByb3cubmFtZXMobWNycGNfcm5hKSkKI21jcnBjX3JuYSA8LSBtY3JwY19ybmEgJT4lIG11dGF0ZShjYXNlcyA9IHJvdy5uYW1lcyguKSwgYmF0Y2ggPSAibUNSUEMiKQoKCgphbm5vIDwtIHJlYWQudGFibGUoIi9Vc2Vycy9kcy9EZXNrdG9wL3Byb2plY3RzL2RhdGEvYW5uby8yMDIwMDlfZGVlcFJOQXNlcV9zYW1wbGVfZnVsbC50eHQiLCBoZWFkZXIgPVQpCgoKCmFubm8gPC0gYW5ubyAlPiUgZHBseXI6OnNlbGVjdChjKHNhbXBsZV9pZCwgd2dzX2lkLCBiaW9wc3lfc2l0ZSwgZGlzZWFzZV90eXBlX1NJR19HRVgsIElEX3BhdGllbnQsdHVtb3JfcHVyaXR5X3JuYSwgUkIxICkpCgpjbGluIDwtIHJlYWRfY3N2KGZpbGUgPSAiL1VzZXJzL2RzL0Rlc2t0b3AvcHJvamVjdHMvZGF0YS9hbm5vL0NoZW5fMjAxOV9FdXJvcGVhbl9FdXJvbG9neV9TdXBwNC5jc3YiLCBjb2xfbmFtZXMgPSBUKQpjbGluJEVuemFsdXRhbWlkZS5yZXNpc3RhbnQgIDwtIGNsaW4kYEVuemFsdXRhbWlkZSByZXNpc3RhbnRgCmNsaW4gPC0gbmEub21pdChjbGluKQpgYGAKCmBgYHtyfQpyYnMgPC0gcmVhZF9jc3YoZmlsZSA9ICIvVXNlcnMvZHMvRGVza3RvcC9TdXBwbGVtZW50L2NoZW4ucmIxLmxvc3MuY3N2IiwgY29sX25hbWVzID0gVCkKCnNpZy51cCA8LSByYnMkYEhpZ2hseS1leHByZXNzZWQgaW4gUkIxLWxvc3M6YCAlPiUgbmEub21pdCgpCnNpZy5kb3duIDwtIHJicyRgTG93LWV4cHJlc3NlZCBpbiBSQjEtbG9zczpgICU+JSBuYS5vbWl0KCkKCgpgYGAKCmBgYHtyfQp0bWUudXAgPC0gYnVsa19kZWcgJT4lIGRwbHlyOjpmaWx0ZXIobG9nRkMgPiAwICYgKCFDbHVzdGVyICVpbiUgYygidHVtb3IiLCAiVW5rbm93biIsICJlcnl0aHJvaWQiKSkgKSAlPiUgLiRHZW5lcwoKdXAgPC0gYnVsa19kZWcgJT4lIGRwbHlyOjpmaWx0ZXIobG9nRkMgPiAwICYgR2VuZXMgJWluJSBsaW5jJGdlbmUubmFtZSkgJT4lIC4kR2VuZXMKI3VwIDwtIGJ1bGtfZGVnICU+JSBkcGx5cjo6ZmlsdGVyKGxvZ0ZDID4gMCAmIEdlbmVzICVpbiUgcGNnJGdlbmUubmFtZSkgJT4lIC4kR2VuZXMKCgp0dW1vci5kb3duIDwtIGJ1bGtfZGVnICU+JSBkcGx5cjo6ZmlsdGVyKGxvZ0ZDIDwgMCAmIChDbHVzdGVyICVpbiUgYygidHVtb3IiKSkgKSAlPiUgLiRHZW5lcwoKCmBgYAoKCmBgYHtyfQoKZ3N2YS5lcyA8LSBnc3ZhKHQobWNycGNfcm5hKSwgZ3NldC5pZHgubGlzdCA9IGxpc3QodG1lLnVwKSwgbWV0aG9kID0gJ3pzY29yZScpCgpkZiA8LSB0KGdzdmEuZXMpICU+JSBkYXRhLmZyYW1lKHNhbXBsZV9pZCA9IHJvdy5uYW1lcyguKSwgVE1FLnBjZyA9IC4pCgpnc3ZhLmVzIDwtIGdzdmEodChtY3JwY19ybmEpLCBnc2V0LmlkeC5saXN0ID0gbGlzdChjKHNpZy51cCkpLCBtZXRob2QgPSAnenNjb3JlJykKCmRmIDwtIHQoZ3N2YS5lcykgJT4lIGRhdGEuZnJhbWUoc2FtcGxlX2lkID0gcm93Lm5hbWVzKC4pLCBQY2EucGNnID0gLikgJT4lIG1lcmdlKGRmKSAlPiUgbWVyZ2UoYW5ubykgJT4lIGlubmVyX2pvaW4oeSA9IGNsaW4sIGJ5ID0gYygiSURfcGF0aWVudCIgPSAiUGF0aWVudC5JRCIpKQoKCgpkZiRSQjEgPC0gYXMuZmFjdG9yKGlmZWxzZShkZiRSQjEgPT0gMCwgIkRlbGV0aW9uIiwgIldUL01vbm8iKSkKZGYkRW56YWx1dGFtaWRlLnJlc2lzdGFudCA8LSBpZmVsc2UoZGYkRW56YWx1dGFtaWRlLnJlc2lzdGFudCA9PSBUUlVFLCAiRW56YWx1dGFtaWRlLnJlc2lzdGFudCIsICJFbnphbHV0YW1pZGUubmFpdmUiKQoKZGYgPC0gZGYgJT4lIG11dGF0ZShHcm91cCA9IGFzLmZhY3RvcihudGlsZShUTUUucGNnLCAyKSkpCgpkZgpwMSA8LSBjb3hwaChTdXJ2KHRpbWUgPU9TLm1DUlBDICwgZXZlbnQgPSBFdmVudCl+IEdyb3VwLCBkYXRhID0gZGYpICU+JSBnZ2ZvcmVzdChmb250c2l6ZSA9IDEpCnAyIDwtIGNveHBoKFN1cnYodGltZSA9T1MubUNSUEMgLCBldmVudCA9IEV2ZW50KX4gUGNhLnBjZywgZGF0YSA9IGRmKSAlPiUgZ2dmb3Jlc3QoZm9udHNpemUgPSAxKQpwMQpwMyA8LWNveHBoKFN1cnYodGltZSA9T1MubUNSUEMgLCBldmVudCA9IEV2ZW50KX4gR3JvdXAgICtFQ09HLlBTICsgUFNBLkF0LkJpb3BzeSsgTERILmF0LmJpb3BzeSArIEFMUCArIEhlbW9nbG9iaW4uYXQuYmlvcHN5ICsgRGlzZWFzZS5TaXRlICsgRW56YWx1dGFtaWRlLnJlc2lzdGFudCAgLCBkYXRhID0gZGYpICU+JSBnZ2ZvcmVzdChmb250c2l6ZSA9IDEpIApwNCA8LSBjb3hwaChTdXJ2KHRpbWUgPU9TLm1DUlBDICwgZXZlbnQgPSBFdmVudCl+IFBjYS5wY2cgICtFQ09HLlBTICsgUFNBLkF0LkJpb3BzeSsgTERILmF0LmJpb3BzeSArIEFMUCArIEhlbW9nbG9iaW4uYXQuYmlvcHN5ICsgRGlzZWFzZS5TaXRlICsgRW56YWx1dGFtaWRlLnJlc2lzdGFudCAgLCBkYXRhID0gZGYpICU+JSBnZ2ZvcmVzdChmb250c2l6ZSA9IDEpIApwMwoKcGRmKCIvVXNlcnMvZHMvRGVza3RvcC9wbG90LnBkZiIsIHdpZHRoID0gMTAsIGhlaWdodCA9IDEwKQpncmlkLmFycmFuZ2UocDEsIHAzLCBuY29sID0gMSkKZGV2Lm9mZigpCgoKdG1lLnVwCgpgYGAKCgoKYGBge3J9CmNlbGx0eXBlcyA8LSBjKCJDRDQiICwgIkNEOCIgLCAiQ1RMMSIgLCAiQ1RMMiIgLCAiSW1tYXR1cmVCIiAsICJNYXR1cmUiICwgIm1EQyIgLCAibWVtQmNlbGwiICwgIk1vbm8xIiAsICJNb25vMiIgLCAiTW9ubzMiICAsICJNb25vY3l0ZSIgLCAiTksiICwgIlRBTSIgLCAiVElNIiAsICJUcmVnUiIgLCAiVHJlZ0EiICwgIk5LVCIgLCAiUHJvQiIgLCAiVGgxMTciICwgInBEQyIgLCAiUHJvZ2VuaXRvcnMiLCAgIk9zdGVvYmxhc3RzIiAsICJPc3Rlb2NsYXN0cyIgLCJQZXJpY3l0ZXMiICwgIkVuZG90aGVsaWFsIiAsICJFcnl0aHJvaWQiICkKCgoKI0xvb3AgYWNyb3NzIGFsbCBjZWxsdHlwZXMgaW4gY2liZXJzb3J0IHJlc3VsdHMgZGYKcmVzX2NmIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShjKGNlbGx0eXBlcyksIEZVTiA9IGZ1bmN0aW9uKG0pewogIAogIAogIHJlc3BvbnNlIDwtIGNmWyxtXQogIAogICNGaXQgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgd2l0aCBjb3ZhcmlhdGUgYXMgYm9uZSBtZXQgc2l0ZSAKICBtb2RlbCA8LSBsbShmb3JtdWxhID0gcmVzcG9uc2UgfiBjZiRSQjEgKyBjZiR0dW1vcl9wdXJpdHlfcm5hKSAKICAjR2V0IGNvZWZmIGZvciBCb25lIGFuZCBwdmFsdWUKICBjb2VmIDwtIHN1bW1hcnkobW9kZWwpJGNvZWZmaWNpZW50c1ssICJFc3RpbWF0ZSJdWzJdCiAgcHZhbCA8LSBzdW1tYXJ5KG1vZGVsKSRjb2VmZmljaWVudHNbLCAiUHIoPnx0fCkiXVsyXQogIAogIHJldHVybiggIGRhdGEuZnJhbWUocmVzcG9uc2UsIHJlcChtLCBsZW5ndGgocmVzcG9uc2UpKSwgcmVwKGNvZWYsIGxlbmd0aChyZXNwb25zZSkpICwgcmVwKHB2YWwsIGxlbmd0aChyZXNwb25zZSkpLCBjZiRNaXh0dXJlLCBjZiRSQjEpICkKCiB9KSkgJT4lIGRhdGEuZnJhbWUoKQoKCmNvbG5hbWVzKHJlc19jZikgPC0gYygiRnJhY3Rpb24iLCAiQ2VsbCIsICJDb2VmZmljaWVudCIsICJQLnZhbHVlIiwgIk1peHR1cmUiLCAiUkIxIikKCiNGRFIgY29ycmVjdGlvbiBhY3Jvc3MgY2VsbHR5cGVzCnJlc19jZiRBZGouUHZhbHVlIDwtIHJlcChwLmFkanVzdCh1bmlxdWUocmVzX2NmJFAudmFsdWUpLCBtZXRob2QgPSAiQkgiKSwgZWFjaCA9IG5yb3coY2YpKQpyZXNfY2YkU2lnIDwtICBpZmVsc2UocmVzX2NmJEFkai5QdmFsdWUgPCAwLjEsICIqIiwgIm5zIikKCnJlc19jZiAlPiUgZHBseXI6OmZpbHRlcihTaWcgPT0gIioiKQoKcmVzX2NmICU+JSBkcGx5cjo6ZmlsdGVyKFNpZyA9PSAiKiIpICU+JSBkcGx5cjo6ZmlsdGVyKENlbGwgJWluJSBjZWxsdHlwZXMpICU+JSBnZ3Bsb3QoIGFlcyh5ID0gQ2VsbCwgeCA9IEZyYWN0aW9uICogMTAwLCBmaWxsID0gUkIxLCBhbHBoYSA9IFNpZykpICsgZ2VvbV9ib3hwbG90KG91dGxpZXIuY29sb3VyID0gTkEgKSArICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9IGMoImRhcmtyZWQiLCAiZGFya2JsdWUiKSkgKyB5bGFiKCJDZWxscyIpICsgeGxhYigiUGVyY2VudGFnZSIpICsgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcyA9IGMoMSwwLjEpKSArIGdndGl0bGUoIkNvbXBhcmlzb24gb2YgY2VsbCBmcmFjdGlvbnMgaW4gbUNSUEMgUk5BLXNlcSIpCgpgYGAKCgoKYGBge3J9CgphIDwtIGdzdmEodChtY3JwY19ybmEpLCBnc2V0LmlkeC5saXN0ID0gbGlzdCh0dW1vci5kb3duKSwgbWV0aG9kID0gJ3pzY29yZScpICU+JSB0KCkKYiA8LSBnc3ZhKHQobWNycGNfcm5hKSwgZ3NldC5pZHgubGlzdCA9IGxpc3Qoc2lnLnVwKSwgbWV0aG9kID0gJ3pzY29yZScpICU+JSB0KCkKYyA8LSBnc3ZhKHQobWNycGNfcm5hKSwgZ3NldC5pZHgubGlzdCA9IGxpc3QoZHBseXI6OmZpbHRlcihncywgZ3NfbmFtZSA9PSAiSEFMTE1BUktfVE5GQV9TSUdOQUxJTkdfVklBX05GS0IiKSRnZW5lX3N5bWJvbCksIG1ldGhvZCA9ICd6c2NvcmUnKSAlPiUgdCgpCgoKCgpwIDwtIGRhdGEuZnJhbWUoUkJTLmhpZ2gubG5jUk5BID0gYSxSQlMudXByZWd1bGF0ZWQuZ2VuZXMgPSBiLEhhbGxtYXJrLlRORkEuU2lnbmFsaW5nLlZpYS5ORktCID0gYykgJT4lIGdhdGhlcihrZXkgPSAiU2lnbmF0dXJlIiwgdmFsdWUgPSAiR0VYIiwgLVJCUy5oaWdoLmxuY1JOQSkgJT4lIGdncGxvdChhZXMoeCA9IFJCUy5oaWdoLmxuY1JOQQosIHkgPSBHRVgsIGNvbG9yID0gU2lnbmF0dXJlKSkgJT4lIGZhY2V0KGZhY2V0LmJ5ID0gIlNpZ25hdHVyZSIpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2xtJykgKyBzdGF0X2NvcigpICsgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImRhcmtyZWQiLCAiZGFya2JsdWUiKSkgKyB0aGVtZV9jbGFzc2ljKCkgKyB5bGFiKCJFeHByZXNzaW9uIikgKyB4bGFiKCJSQjEgbG9zcyB1cHJlZ3VsYXRlZCBUTUUtbG5jUk5BcyIpCgpwCgoKCmBgYAoKCgpgYGB7cn0KCklkZW50cyhibWV0KSA8LSAiYmlvc2FtcGxlX2lkIgoKbWF0ID0gIEF2ZXJhZ2VFeHByZXNzaW9uKG9iamVjdCA9IGJtZXQpCgoKCnJlcyA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkocGF0aHdheXMsIEZVTiA9IGZ1bmN0aW9uKHApewogIAogIHByaW50KHApCiAgZyA8LSBncyAlPiUgZHBseXI6OmZpbHRlcihnc19uYW1lID09IHApICU+JSAuJGdlbmVfc3ltYm9sCiAgZGYgPC0gbWF0JFJOQSAlPiUgZ3N2YSggZ3NldC5pZHgubGlzdCA9IGxpc3QoQSA9IHRtZS51cCwgQiA9IHVwLCBDID0gZyksIG1ldGhvZCA9ICd6c2NvcmUnKSAlPiUgdCgpICU+JSBkYXRhLmZyYW1lKCkKICBkZiA8LSBkYXRhLmZyYW1lKFBhdGh3YXkgPSBwLCBQQ0MudXAgPSBjb3IudGVzdChkZiRBLGRmJEMpJGVzdGltYXRlLCBQdmFsLnVwID0gY29yLnRlc3QoZGYkQSxkZiRDKSRwLnZhbHVlLCBQQ0MuZG93biA9IGNvci50ZXN0KGRmJEIsZGYkQykkZXN0aW1hdGUsIFB2YWwuZG93biA9IGNvci50ZXN0KGRmJEIsIGRmJEMpJHAudmFsdWUpCiAgcmV0dXJuKGRmKQp9KSkKCgpyZXMgJT4lIGFycmFuZ2UoLVBDQy51cCkKcmVzLnVwIDwtIGFycmFuZ2UocmVzLCAtUENDLnVwKVsxOjEwLGMoIlBhdGh3YXkiLCAiUENDLnVwIildCmNvbG5hbWVzKHJlcy51cCkgPC0gYygiUGF0aHdheSIsICJQQ0MiKQoKcmVzLmRvd24gPC0gYXJyYW5nZShyZXMsIC1QQ0MuZG93bilbMToxMCxjKCJQYXRod2F5IiwgIlBDQy5kb3duIildCmNvbG5hbWVzKHJlcy5kb3duKSA8LSBjKCJQYXRod2F5IiwgIlBDQyIpCgpwIDwtIHJiaW5kKHJlcy5kb3duLCBtdXRhdGUocmVzLnVwLCBQQ0MgPSBQQ0MgKiAtMSkpICU+JSBtdXRhdGUoR3JvdXAgPSBpZmVsc2UoUENDID4gMCwgIkFsbCBSQjEtbG9zcyB1cHJlZ3VsYXRlZCBwcm90ZWluIGNvZGluZyBnZW5lcyIsICJSQjEtbG9zcyB1cHJlZ3VsYXRlZCBUTUUtcHJvdGVpbiBjb2RpbmcgZ2VuZXMiKSkgJT4lIG11dGF0ZShQYXRod2F5ID0gcGFzdGUwKFBhdGh3YXksIl8iLCBjKDE6MjApKSkgJT4lIGdncGxvdChhZXMoeSA9IHJlb3JkZXIoUGF0aHdheSwgUENDKSwgeCA9IFBDQywgZmlsbCA9IEdyb3VwKSkgKyBnZW9tX2NvbCgpICsgeGxpbShjKC0xLDEpKSArIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEsMSwwLjEpLGxhYmVscyA9IHNlcSgtMSwxLDAuMSkgJT4lIGFicygpKSArIHlsYWIoIlBhdGh3YXkiKSArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImRhcmtyZWQiLCAibmF2eSIpKSArIHRoZW1lX2NsYXNzaWMoKSAKCnAKCmdnc2F2ZShmaWxlbmFtZSA9ICIvVXNlcnMvZHMvRGVza3RvcC9wbG90LnBkZiIsIHBsb3QgPSBwLCB3aWR0aCA9IDEwKQoKCmBgYAoKCmBgYHtyfQoKdXAKcXVlcnkgPC0gbGluY1tsaW5jJGdlbmUubmFtZSAlaW4lIHVwLCdnZW5lJywgZHJvcCA9IFRdIAoKcXVlcnkgPC0gRW5zRGIuSHNhcGllbnMudjg2ICU+JSBwcm9tb3RlcnMoKSAlPiUgZGF0YS5mcmFtZSgpICU+JSBkcGx5cjo6ZmlsdGVyKGdlbmVfaWQgJWluJSBxdWVyeSkgJT4lIEdSYW5nZXMoKQoKc2VxbGV2ZWxzU3R5bGUocXVlcnkpIDwtICJVQ1NDIgoKCgpzZXEgPC0gZ2V0U2VxKEJTZ2Vub21lLkhzYXBpZW5zLlVDU0MuaGczOCwgcXVlcnkpCm5hbWVzKHNlcSkgPC0gcXVlcnkkdHhfaWQKd3JpdGVYU3RyaW5nU2V0KHNlcSwgZmlsZXBhdGggPSAiL1VzZXJzL2RzL0Rlc2t0b3AvcmIxLnVwLmZhIikKCgpxdWVyeSA8LSBsaW5jW2xpbmMkZ2VuZS5uYW1lICVpbiUgdG1lLnVwLCdnZW5lJywgZHJvcCA9IFRdIAoKcXVlcnkgPC0gRW5zRGIuSHNhcGllbnMudjg2ICU+JSBwcm9tb3RlcnMoKSAlPiUgZGF0YS5mcmFtZSgpICU+JSBkcGx5cjo6ZmlsdGVyKGdlbmVfaWQgJWluJSBxdWVyeSkgJT4lIEdSYW5nZXMoKQoKc2VxbGV2ZWxzU3R5bGUocXVlcnkpIDwtICJVQ1NDIgoKCgpzZXEgPC0gZ2V0U2VxKEJTZ2Vub21lLkhzYXBpZW5zLlVDU0MuaGczOCwgcXVlcnkpCm5hbWVzKHNlcSkgPC0gcXVlcnkkdHhfaWQKd3JpdGVYU3RyaW5nU2V0KHNlcSwgZmlsZXBhdGggPSAiL1VzZXJzL2RzL0Rlc2t0b3AvcmIxLnRtZS51cC5mYSIpCgoKCgpgYGAKCgpgYGB7cn0KbW90aWYgPC0gcmVhZF90c3YoZmlsZSA9ICIvVXNlcnMvZHMvRGVza3RvcC9SQjEuYWxsLnVwLnRzdiIsIGNvbF9uYW1lcyA9IFQpCgoKCm1vdGlmLnVwIDwtIG1vdGlmICU+JSBtdXRhdGUoU2lnID0gLWBsb2dfYWRqX3AtdmFsdWVgKSAlPiUgYXJyYW5nZSgtU2lnKSAlPiUgbXV0YXRlKFRGID0gZ3N1YihwYXR0ZXJuID0gIl9IVU1BTi4qIiwgcmVwbGFjZW1lbnQgPSAiIiwgeCA9IG1vdGlmX2lkKSkgJT4lIGRwbHlyOjpmaWx0ZXIoZGJfaW5kZXggPT0gIjEiKSAlPiUgaGVhZChuPTIwKSAKbW90aWYudXAKCm1vdGlmIDwtIHJlYWRfdHN2KGZpbGUgPSAiL1VzZXJzL2RzL0Rlc2t0b3AvUkIxLnRtZS51cC50c3YiLCBjb2xfbmFtZXMgPSBUKQoKbW90aWYudG1lLnVwIDwtIG1vdGlmICU+JSBtdXRhdGUoU2lnID0gLWBsb2dfYWRqX3AtdmFsdWVgKSAlPiUgYXJyYW5nZSgtU2lnKSAlPiUgbXV0YXRlKFRGID0gZ3N1YihwYXR0ZXJuID0gIl9IVU1BTi4qIiwgcmVwbGFjZW1lbnQgPSAiIiwgeCA9IG1vdGlmX2lkKSkgJT4lIGRwbHlyOjpmaWx0ZXIoZGJfaW5kZXggPT0gIjEiKSAlPiUgaGVhZChuPTIwKSAKCnAgPC0gcmJpbmQobW90aWYudXAsIG11dGF0ZShtb3RpZi50bWUudXAsIFNpZyA9IFNpZyAqIC0xKSkgJT4lIG11dGF0ZShHcm91cCA9IGlmZWxzZShTaWcgPiAwLCAiQWxsIFJCMS1sb3NzIHVwcmVndWxhdGVkIGxuY1JOQXMiLCAiUkIxLWxvc3MgdXByZWd1bGF0ZWQgVE1FLWxuY1JOQXMiKSkgJT4lIGdncGxvdChhZXMoeSA9IHJlb3JkZXIoVEYsIFNpZyksIHggPSBTaWcsIGZpbGwgPSBHcm91cCkpICsgZ2VvbV9jb2woKSArIHhsaW0oYygtMTAwLDEwMCkpICsgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLDEwMCwxMCksbGFiZWxzID0gc2VxKC0xMDAsMTAwLDEwKSAlPiUgYWJzKCkpICsgeWxhYigiVEYgTW90aWYiKSArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImRhcmtyZWQiLCAibmF2eSIpKSArIHRoZW1lX2NsYXNzaWMoKSArIHhsYWIoIi1sb2cxMChBZGogUHZhbHVlKSIpCgpwCgpyYmluZChtb3RpZi51cCwgbXV0YXRlKG1vdGlmLnRtZS51cCwgU2lnID0gU2lnICogLTEpKSAlPiUgbXV0YXRlKEdyb3VwID0gaWZlbHNlKFNpZyA+IDAsICJBbGwgUkIxLWxvc3MgdXByZWd1bGF0ZWQgbG5jUk5BcyIsICJJbW11bmUgUkIxLWxvc3MgdXByZWd1bGF0ZWQgbG5jUk5BcyIpKSAKbW90aWYudG1lLnVwCgoKCmBgYAoKCgpgYGB7cn0KY2xpbiA8LSByZWFkX3RzdihmaWxlID0gIi9Vc2Vycy9kcy9EZXNrdG9wL3ByYWRfc3UyY18yMDE5X2NsaW5pY2FsX2RhdGEudHN2IiwgY29sX25hbWVzID0gVCkKY2xpbiA8LSBjbGluWyFpcy5uYShjbGluJGBPdmVyYWxsIFN1cnZpdmFsIChNb250aHMpYCksXQoKcm5hIDwtIHJlYWRfdGFibGUoZmlsZSA9ICIvVXNlcnMvZHMvRGVza3RvcC9kYXRhX21ybmFfc2VxX2Zwa21fcG9seWEudHh0IiwgY29sX25hbWVzID0gVCkKcmIxIDwtIHJlYWRfdGFibGUoZmlsZSA9ICIvVXNlcnMvZHMvRGVza3RvcC9kYXRhX2NuYS50eHQiLCBjb2xfbmFtZXMgPSBUKQoKY2xpbiA8LSBjbGluICU+JSBtdXRhdGUoU2FtcGxlLklEID1nc3ViKHBhdHRlcm4gPSAiLXxfIiwgcmVwbGFjZW1lbnQgPSAiXFwuIiwgeCA9YFNhbXBsZSBJRGAgICkpCgpjb2xuYW1lcyhybmEpIDwtIGdzdWIocGF0dGVybiA9ICItfF8iLCByZXBsYWNlbWVudCA9ICJcXC4iLCB4ID1jb2xuYW1lcyhybmEpICApCmNvbG5hbWVzKHJiMSkgPC0gZ3N1YihwYXR0ZXJuID0gIi18XyIsIHJlcGxhY2VtZW50ID0gIlxcLiIsIHggPWNvbG5hbWVzKHJiMSkgICkKCnJiMSA8LSByYjEgJT4lIGRwbHlyOjpmaWx0ZXIoSHVnby5TeW1ib2wgPT0gIlJCMSIpICU+JSB0KCkgJT4lIGRhdGEuZnJhbWUoUkIxID0gLikgJT4lIGRwbHlyOjpmaWx0ZXIoUkIxID09IC0yKSAlPiUgcm93Lm5hbWVzKCkKCmNsaW4gPC0gY2xpbiAlPiUgZHBseXI6OmZpbHRlcihTYW1wbGUuSUQgJWluJSBjb2xuYW1lcyhybmEpKQoKY2xpbiA8LSBjbGluICU+JSBtdXRhdGUoUkIxID0gaWZlbHNlKFNhbXBsZS5JRCAlaW4lIHJiMSwgMCwxKSkgCnJuYSA8LSBybmFbIWR1cGxpY2F0ZWQocm5hJEh1Z28uU3ltYm9sKSxdICU+JSBkYXRhLmZyYW1lKCkKcm93Lm5hbWVzKHJuYSkgPC0gcm5hJEh1Z28uU3ltYm9sCnJuYSA8LSBybmFbLC0xXQoKcm5hIDwtIGxvZzFwKHJuYSkKCgpgYGAKCgpgYGB7cn0KCgpjbGluIDwtIHJlYWRfY3N2KGZpbGUgPSAiL1VzZXJzL2RzL0Rlc2t0b3AvcHJvamVjdHMvZGF0YS9hbm5vL05hdF9HZW5fc2FtcGxlYW5uby5jc3YiLCBjb2xfbmFtZXMgPSBUKQoKcm5hIDwtIHJlYWRfdGFibGUoZmlsZSA9ICIvVXNlcnMvZHMvRGVza3RvcC9wcm9qZWN0cy9kYXRhL3JuYS8yMDE4XzA0XzE1X21hdHJpeF9ybmFfY291bnRzLnR4dCIpCgpybmEKCnJuYSA8LSBybmFbIWR1cGxpY2F0ZWQocm5hJHN5bWJvbCksXSAlPiUgZGF0YS5mcmFtZSgpCgoKCnJuYQpyb3cubmFtZXMocm5hKSA8LSBybmEkc3ltYm9sCnJuYSA8LSBybmFbLC0xXQprZWVwLmV4cHJzIDwtIGZpbHRlckJ5RXhwcihhcy5tYXRyaXgocm5hKSxtaW4uY291bnQgPSA1ICkKcm5hCgoKCnJuYSA8LSBybmFba2VlcC5leHBycyxdCgpybmEKcm5hIDwtIGVkZ2VSOjpjcG0ocm5hLCBsb2cgPSBUKSAlPiUgdCgpICU+JSBkYXRhLmZyYW1lKCkjTG9nIG5vcm1hbGl6ZSBmb3IgaGVhdG1hcAojbWNycGNfcm5hIDwtIG1jcnBjX3JuYSAlPiUgdCgpICU+JSBkYXRhLmZyYW1lKCkjQ291bnRzIGZvciBERUcgYW5hbHlzaXMKcm93Lm5hbWVzKHJuYSkgPC0gZ3N1YigiXFwuIiwgIi0iLCAgeCA9IHJvdy5uYW1lcyhybmEpKQojbWNycGNfcm5hIDwtIG1jcnBjX3JuYSAlPiUgbXV0YXRlKGNhc2VzID0gcm93Lm5hbWVzKC4pLCBiYXRjaCA9ICJtQ1JQQyIpCgoKY2xpbgoKYGBgCgoKYGBge3J9CgpwYXRod2F5cwoKZGYgPC0gZ3N2YShhcy5tYXRyaXgodChybmEpKSwgZ3NldC5pZHgubGlzdCA9IGxpc3QoQSA9IGRwbHlyOjpmaWx0ZXIoZ3MsIGdzX25hbWUgPT0gIkhBTExNQVJLX0lMNl9KQUtfU1RBVDNfU0lHTkFMSU5HIikkZ2VuZV9zeW1ib2wsIEIgPSBzaWcudXApLCBtZXRob2QgPSAnenNjb3JlJykgJT4lIHQoKQoKCiNkZiA8LSBnc3ZhKGFzLm1hdHJpeChybmEpLCBnc2V0LmlkeC5saXN0ID0gbGlzdChjKCJDRDNEIiwgIkNUTEE0IikpLCBtZXRob2QgPSAnenNjb3JlJykgJT4lIHQoKQoKCiNkZiA8LSBkZiAlPiUgZGF0YS5mcmFtZSggU2FtcGxlLklEID0gcm93Lm5hbWVzKC4pKSU+JSBtZXJnZShjbGluLCBieSA9IGMoIlNhbXBsZS5JRCIgPSAiU2FtcGxlLklEIikpCgpkZiA8LSBkZiAlPiUgZGF0YS5mcmFtZSggU2FtcGxlID0gcm93Lm5hbWVzKC4pKSU+JSBtZXJnZShjbGluLCBieSA9IGMoIlNhbXBsZS5JRCIgPSAiU2FtcGxlIikpCgpkZiAlPiUgZ2dwbG90KGFlcyh4ID0gQSwgeSA9IEIpKSArZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikgKyBzdGF0X2NvcigpCgoKZGYkU3RhdHVzIDwtIGlmZWxzZShkZiRgT3ZlcmFsbCBTdXJ2aXZhbCBTdGF0dXNgID09ICIxOkRFQ0VBU0VEIiwgMSwgMCkgCiNjb3hwaChTdXJ2KHRpbWUgPWBPdmVyYWxsIFN1cnZpdmFsIChNb250aHMpYCAsIGV2ZW50ID0gU3RhdHVzKX4gVE1FLmxuY1JOQSwgZGF0YSA9IGRmKSAlPiUgZ2dmb3Jlc3QoZm9udHNpemUgPSAxKQoKZGYKZGYgJT4lIGdncGxvdChhZXMoeSA9IEEsIHggPSBhcy5mYWN0b3IoYFJCMSBpbmFjdGl2YXRpb25gKSkpICsgZ2VvbV9ib3hwbG90KCkgKyBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMykKCnQudGVzdCggZGYkQX4gYXMuZmFjdG9yKGRmJGBSQjEgaW5hY3RpdmF0aW9uYCkpCgoKcmVzIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShwYXRod2F5cywgRlVOID0gZnVuY3Rpb24ocCl7CiAgCiAgcHJpbnQocCkKICBnIDwtIGdzICU+JSBkcGx5cjo6ZmlsdGVyKGdzX25hbWUgPT0gcCkgJT4lIC4kZ2VuZV9zeW1ib2wKICBkZiA8LSAgZ3N2YShleHByID0gYXMubWF0cml4KHQocm5hKSkgLGdzZXQuaWR4Lmxpc3QgPSBsaXN0KEEgPSBnLCBCID0gc2lnLnVwICksIG1ldGhvZCA9ICd6c2NvcmUnKSAlPiUgdCgpICU+JSBkYXRhLmZyYW1lKCkKICBkZiA8LSBkYXRhLmZyYW1lKFBhdGh3YXkgPSBwLCBQQ0MudXAgPSBjb3IudGVzdChkZiRBLGRmJEIpJGVzdGltYXRlLCBQdmFsLnVwID0gY29yLnRlc3QoZGYkQSxkZiRCKSRwLnZhbHVlKQogIHJldHVybihkZikKfSkpCgpyZXMgJT4lIGFycmFuZ2UoLVBDQy51cCkKYGBgCgo=